﻿namespace DotNetCommon.Validate;

/// <summary>
/// bool类型校验方法
/// </summary>
public static class ValidateBoolExtensions
{
    /// <summary>
    /// 必须为true
    /// </summary>
    public static IValidateContext<bool> MustBeTrue(this IValidateContext<bool> ctx, string errorMessage = null)
    {
        if (ctx.StopValidate) return ctx;
        if (!ctx.Model)
        {
            ctx.AddError(ctx.ModelPath, errorMessage ?? $"'{ctx.ModelPath}' 必须为 true !");
        }
        return ctx;
    }

    /// <summary>
    /// 必须为false
    /// </summary>
    public static IValidateContext<bool> MustBeFalse(this IValidateContext<bool> ctx, string errorMessage = null)
    {
        if (ctx.StopValidate) return ctx;
        if (ctx.Model)
        {
            ctx.AddError(ctx.ModelPath, errorMessage ?? $"'{ctx.ModelPath}' 必须为 false !");
        }
        return ctx;
    }

    /// <summary>
    /// 必须为true
    /// </summary>
    public static IValidateContext<bool?> MustBeTrue(this IValidateContext<bool?> ctx, string errorMessage = null)
    {
        if (ctx.StopValidate) return ctx;
        if (ctx.Model == null || ctx.Model == false)
        {
            ctx.AddError(ctx.ModelPath, errorMessage ?? $"'{ctx.ModelPath}' 必须为 true !");
        }
        return ctx;
    }

    /// <summary>
    /// 必须为false
    /// </summary>
    public static IValidateContext<bool?> MustBeFalse(this IValidateContext<bool?> ctx, string errorMessage = null)
    {
        if (ctx.StopValidate) return ctx;
        if (ctx.Model == null || ctx.Model == true)
        {
            ctx.AddError(ctx.ModelPath, errorMessage ?? $"'{ctx.ModelPath}' 必须为 false !");
        }
        return ctx;
    }
}
